package scr.hotel;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import scr.hibernate.InitSessionFactory;

public class TipoDeQuarto {
	
	private int Npessoas;
	private int Ncamas;
	private boolean camaExtra;
	private double preco;
	private int tipo;
	private Quarto quarto;
	private int id;

	public TipoDeQuarto() {}	
	
	public double getPreco() {
		return preco;
	}
	public void setTipo(int tipo) {
		this.tipo = tipo;
	}
	public Quarto getQuarto() {
		return quarto;
	}
	public void setQuarto(Quarto quarto) {
		this.quarto = quarto;
	}
	public int getTipo()
	{
		return tipo;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	public int getNpessoas() {
		return Npessoas;
	}

	public void setNpessoas(int numero) {
		Npessoas = numero;
	}

	public int getNcamas() {
		return Ncamas;
	}

	public void setNcamas(int numero) {
		Ncamas = numero;
	}

	public boolean getCamaExtra() {
		return camaExtra;
	}

	public void setCamaExtra(boolean cama) {
		camaExtra = cama;
	}

	public double getpreco() {
		return preco;
	}

	public void setPreco(double preco) {
		this.preco = preco;
	}
	
	public void acresentarCama(double valor)
	{
		if(camaExtra)  return;
		camaExtra = true;
		Npessoas++;
		Ncamas++;
		preco += valor;
	}
	
	public static void saveTipoDeQuarto(TipoDeQuarto tipo) {
		Transaction tx = null;
		Session session = InitSessionFactory.getInstance().getCurrentSession();
		try {
			tx = session.beginTransaction();
			session.save(tipo);
			tx.commit();
		} catch (HibernateException e) {
			e.printStackTrace();
			if (tx != null && tx.isActive())
				tx.rollback();
		}
	}
	
	public static void deleteTipoDeQuarto(TipoDeQuarto tipo) {

		Transaction tx = null;
		Session session = InitSessionFactory.getInstance().getCurrentSession();
		try {
			tx = session.beginTransaction();

			session.delete(tipo);

			tx.commit();
		} catch (HibernateException e) {
			e.printStackTrace();
			if (tx != null && tx.isActive())
				tx.rollback();
		}
	}

	public static void buscaTipoDeQuarto(Quarto quarto)
	{		
		Transaction tx = null;
		Session sessao = InitSessionFactory.getInstance().getCurrentSession();

		try {
			tx = sessao.beginTransaction();
			List tipos = sessao.createCriteria(TipoDeQuarto.class)
			.add( Restrictions.like("id", quarto.getId()) )
			.list();

			quarto.setTipo((TipoDeQuarto)tipos.get(0) );
			tx.commit();

		} catch (HibernateException e) {
			e.printStackTrace();
		}

	}
/*	
	@SuppressWarnings("unchecked")
	public static LinkedList listarPorTipo(TipoDeQuarto perfil) {
		Transaction tx = null;
		Session sessao = InitSessionFactory.getInstance().getCurrentSession();
		List quartos = null;
		LinkedList busca = null;
		
		try {
			tx = sessao.beginTransaction();
			quartos = sessao.createCriteria(TipoDeQuarto.class)
			.list();

			tx.commit();
			int i=0;
			for (Iterator iter = quartos.iterator(); iter.hasNext();) {
				TipoDeQuarto element = (TipoDeQuarto) iter.next();
				if (element.getNcamas() == perfil.getNcamas()
					&& element.getNpessoas() == perfil.getNpessoas()
					&& element.getTipo() == perfil.getTipo() )
				{
					Quarto cadeVoce = (Quarto)Quarto.buscaQuarto(element); 
					element.setQuarto(cadeVoce);
					cadeVoce.setTipo((TipoDeQuarto)element);
//					busca.add(i, cadeVoce);
					i++;
				}
				
			}

		} catch (HibernateException e) {
			e.printStackTrace();
		}
		LinkedList linkedList = new LinkedList(quartos);
		return linkedList;		
//		return busca;

	}
	*/
	public String toString()
	{
		return "tipo " + tipo + " Ncamas " + Ncamas + " Npessoas " + Npessoas;
	}
}
